﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Financeiro.Model;


namespace Financeiro
{
    public partial class ContaDetalhe : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!((Page)System.Web.HttpContext.Current.CurrentHandler).IsPostBack)
            {
                // Busca parâmetros de GET.
                int id_conta = 0;
                try
                {
                    id_conta = Convert.ToInt32(Request.QueryString["id"]);
                }
                catch
                {
                    Response.Redirect("/Contas.aspx");
                }

                Session["id_conta"] = id_conta;

                //Atualiza os campos. 
                //Caso não exista nenhuma conta com o ID fornecido, redireciona para a página anterior.
                if (atualizarCampos(id_conta) == false)
                {
                    Response.Redirect("/Contas.aspx");
                }
            }
        }

        protected Boolean atualizarCampos(int id_conta)
        {
            ContasModel conta = ContasModel.getConta(id_conta);
            int id_atendimento = ContasModel.getAtendimento(id_conta);
            string data_emissao = ContasModel.getDataEmissao(id_conta);

            if (conta != null)
            {
                this.txtValor.Text = conta.Valor.ToString();
                this.txtDescricao.Text = conta.Descricao.ToString();
                this.txtDataCriacao.Text = conta.DataCriacao.ToString();
                this.txtDataEmissao.Text = data_emissao.ToString();
                this.txtDataVencimento.Text = conta.DataVencimento.ToString();

                //Se for uma conta a receber, exibe os campos de ID de Atendimento, e nome do Cliente.
                if (id_atendimento != 0)
                {
                    this.txtAtendimento.Text = id_atendimento.ToString();
                }
                else
                {
                    this.lblAtendimento.Visible = false;
                    this.txtAtendimento.Visible = false;
                }

                //Se for uma conta emitida, exibe o botão para confirmar o pagamento do boleto.
                if (conta.Status == 2)
                {
                    this.btnEmitir.Visible = false;
                    this.btnEditar.Visible = false;
                    this.btnConfirmarPagamento.Visible = true;
                }
                else
                {
                    this.btnConfirmarPagamento.Visible = false;
                }
                this.btnAtualizar.Visible = false;
                this.btnCancelar.Visible = false;

                //Remove todas as bordas dos campos.
                this.txtValor.BorderStyle = BorderStyle.None;
                this.txtDescricao.BorderStyle = BorderStyle.None;
                this.txtDataCriacao.BorderStyle = BorderStyle.None;
                this.txtDataEmissao.BorderStyle = BorderStyle.None;
                this.txtDataVencimento.BorderStyle = BorderStyle.None;
                this.txtAtendimento.BorderStyle = BorderStyle.None;

                return true;
            }
            else
            {
                return false;
            }
        }

        //Ativa a edição dos campos quando a conta ainda está pendente.
        protected void btnEditar_Click(object sender, EventArgs e)
        {
            //Recoloca todas as bordas dos campos.
            this.txtValor.BorderStyle = BorderStyle.NotSet;
            this.txtDescricao.BorderStyle = BorderStyle.NotSet;
            this.txtDataVencimento.BorderStyle = BorderStyle.NotSet;
            this.txtAtendimento.BorderStyle = BorderStyle.NotSet;
			
            //Reativa as edições nos campos.
            this.txtValor.ReadOnly = false;
            this.txtDescricao.ReadOnly = false;
            this.txtDataVencimento.ReadOnly = false;
            this.txtAtendimento.ReadOnly = false;

            //Manipula os outros botões.
            this.btnEditar.Visible = false;
            this.btnEmitir.Visible = false;
            this.btnAtualizar.Visible = true;
			this.btnCancelar.Visible = true;
        }

        //Botão para confirmar a emissão de um boleto.
        protected void btnEmitir_Click(object sender, EventArgs e)
        {
            this.btnEmitir.Visible = false;
            DateTime data_emissao = DateTime.Now;
            ContasModel.atualizaDataEmissao(Convert.ToInt32(Session["id_conta"]), data_emissao);

            this.txtDataEmissao.Text = data_emissao.ToString();
            this.btnConfirmarPagamento.Visible = true;
        }

        //Botão para confirmar um pagamento de boleto manualmente.
        protected void btnConfirmarPagamento_Click(object sender, EventArgs e)
        {
            this.btnConfirmarPagamento.Visible = false;
            DateTime data_pagamento = DateTime.Now;
            ContasModel.atualizaDataPagamento(Convert.ToInt32(Session["id_conta"]), data_pagamento);
            
            //Redireciona para a tela de visualização da nota fiscal.
            Response.Redirect("/NotaFiscal.aspx?id=" + Session["id_conta"] + "");
        }

        protected void btnAtualizar_Click(object sender, EventArgs e)
        {
			int id_conta = Convert.ToInt32(Session["id_conta"]);
			double valor = 0;
			DateTime data_vencimento = new DateTime();
			int id_atendimento = ContasModel.getAtendimento(id_conta);
			int contem_erro = 0;

			// Validação dos campos.
			try
			{
				valor = Convert.ToDouble(this.txtValor.Text);
				if (valor <= 0)
				{
					contem_erro = 1;
					this.errValor.Text = "Valor inválido";
				}
				else
				{
					this.errValor.Text = "";
				}
			}
			catch
			{
				contem_erro = 1;
				this.errValor.Text = "Valor inválido";
			}
			try
			{
				data_vencimento = Convert.ToDateTime(this.txtDataVencimento.Text);
				DateTime hoje = DateTime.Now;
				if (DateTime.Compare(hoje, data_vencimento) >= 0)
				{
					contem_erro = 1;
					this.errDataVencimento.Text = "Data anterior à de hoje";
				}
				else
				{
					this.errDataVencimento.Text = "";
				}
			}
			catch
			{
				contem_erro = 1;
				this.errDataVencimento.Text = "Data inválida";
			}
			if (id_atendimento != 0)
			{
				try
				{
					id_atendimento = Convert.ToInt32(this.txtAtendimento.Text);
					this.errAtendimento.Text = "";
				}
				catch
				{
					contem_erro = 1;
					this.errAtendimento.Text = "ID inválido";
				}
			}
			if (contem_erro == 0)
			{
				ContasModel.atualizaConta(id_conta, valor, this.txtDescricao.Text.ToString(), data_vencimento, id_atendimento);
				//Recoloca todas as bordas dos campos.
				this.txtValor.BorderStyle = BorderStyle.None;
				this.txtDescricao.BorderStyle = BorderStyle.None;
				this.txtDataVencimento.BorderStyle = BorderStyle.None;
				this.txtAtendimento.BorderStyle = BorderStyle.None;

				//Reativa as edições nos campos.
				this.txtValor.ReadOnly = true;
				this.txtDescricao.ReadOnly = true;
				this.txtDataVencimento.ReadOnly = true;
				this.txtAtendimento.ReadOnly = true;

				//Manipula os outros botões.
				this.btnEditar.Visible = true;
				this.btnEmitir.Visible = true;
				this.btnAtualizar.Visible = false;
				this.btnCancelar.Visible = false;

				//Campos de validação resetados.
				this.errValor.Text = "";
				this.errDataVencimento.Text = "";
				this.errAtendimento.Text = "";
			}
        }

        protected void btnCancelar_Click(object sender, EventArgs e)
        {
            //Recoloca todas as bordas dos campos.
            this.txtValor.BorderStyle = BorderStyle.None;
            this.txtDescricao.BorderStyle = BorderStyle.None;
            this.txtDataVencimento.BorderStyle = BorderStyle.None;
            this.txtAtendimento.BorderStyle = BorderStyle.None;

            //Reativa as edições nos campos.
            this.txtValor.ReadOnly = true;
            this.txtDescricao.ReadOnly = true;
            this.txtDataVencimento.ReadOnly = true;
            this.txtAtendimento.ReadOnly = true;

            //Manipula os outros botões.
            this.btnEditar.Visible = true;
            this.btnEmitir.Visible = true;
            this.btnAtualizar.Visible = false;
            this.btnCancelar.Visible = false;

			//Campos de validação resetados.
			this.errValor.Text = "";
			this.errDataVencimento.Text = "";
			this.errAtendimento.Text = "";
        }

        protected void btnVoltar_Click(object sender, EventArgs e)
        {
            Response.Redirect("/Contas.aspx");
        }
    }
}